package com.example.runtimepermissiontest;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button makeCall = findViewById(R.id.make_call);
        makeCall.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 第一步判断用户是不是已经给我们授权了。
                // checkSelfPermission()接收两个参数：
                // 第一个是Context,第二个是具体的权限名
                // 然后使用方法的返回值和PackageManager.PERMISSION_GRANTED做比较，相等就说明用户已经授权，不相等就就表示用户没有授权
                if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
                    // 没有授权，去向用户申请权限
                    // requestPermissions()接收三个参数：
                    // 第一个参数是Activity的实例，第二个参数是一个String数组，把要申请的权限名放在数组中即可，第三个参数是请求码，只要是唯一值就可以
                    // 调用完此方法之后，系统会弹出一个权限申请的对话框，然后用户可以选择同意或拒绝权限申请，无论哪种结果，最终都会回调到onRequestPermissionsResult()
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CALL_PHONE}, 1);
                } else {
                    // 授权去执行拨打电话逻辑操作
                    call();
                }
            }
        });

    }
    private void call() {
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:10086"));
            startActivity(intent);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        // 授权的结果封装在grantResults参数当中
        switch (requestCode) {
            case 1:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    call();
                } else {
                    Toast.makeText(this, "You denied the permission", Toast.LENGTH_SHORT).show();
                }
                break;
            default:
        }
    }
}
